package com.reflex.method;

import java.lang.reflect.Field;

/**
 * @Author: lizehui
 * @Description: 通过反射机制使用类中属性
 * @Date: 2022/11/22/13:10
 */
public class ReflectionAttribute {

    public static void main(String[] args) throws Exception{

        //--------------set----------------
        System.out.println("--------------set----------------");
        //1、得到Student类对应的Class对象
        Class cls = Class.forName("com.reflex.dao.Student");
        //2、创建对象-用无参构造器的方式创建实例
        Object o = cls.newInstance();
        //3.1使用反射得到public的属性对象
        Field age = cls.getField("age");
        //3.2把实例中的age字段设置为100
        age.set(o,100);
        System.out.println(o);
        //4.1使用反射得到private的属性对象
        Field name = cls.getDeclaredField("name");
        //4.2对name进行爆破
        name.setAccessible(true);
        //4.2把实例中的name字段设置为李泽辉
        //你也可以这么写
        //name.set(null,"lizehui");
        //因为是静态的，是所有对象的可以设置为null
        name.set(o,"lizehui");
        System.out.println(o);
        //--------------get----------------
        System.out.println("--------------get----------------");
        //获取的话就是这样
        System.out.println(age.get(o));
        System.out.println(name.get(o));
        //这里是因为name是static的所有可以传null，一样的道理，static属于所有对象
        System.out.println(name.get(null));

    }


}
